package espacokidsadm.modelo.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.ManyToMany;

import espacokidsadm.listener.AuditoriaListener;
import espacokidsadm.modelo.type.Sexo;
import espacokidsadm.modelo.type.TipoResponsabilidade;

@Entity
@EntityListeners(AuditoriaListener.class)


public class Responsavel implements Serializable, Auditavel{

	private static final long serialVersionUID = 1L;

	
	@EmbeddedId
	private ResponsavelPK id;
	
	
	@ManyToMany(mappedBy="responsaveisAluno")
	private List<Aluno> alunos = new ArrayList<>();
	
	
	@Column(name="recebe_info_aluno")
	private boolean recebeInformacaoAluno = true;
	
	private Auditoria auditoria;

	
	
	public Responsavel(){
		this.id = new ResponsavelPK();
	}
	
	public Responsavel(ResponsavelPK id) {
		super();
		this.id = id;
	}
	
	public void setPessoa(Pessoa pessoa){
		
		this.id.setPessoa(pessoa);
		
	}
	
	public ResponsavelPK getId() {
		return id;
	}

	public Collection<Aluno> getAlunos() {
		return alunos;
	}


	public boolean isRecebeInformacaoAluno() {
		return recebeInformacaoAluno;
	}

	public Auditoria getAuditoria() {
		return auditoria;
	}

	public void setId(ResponsavelPK id) {
		this.id = id;
	}


	public void setRecebeInformacaoAluno(boolean recebeInformacaoAluno) {
		this.recebeInformacaoAluno = recebeInformacaoAluno;
	}

	
	
	public void setAuditoria(Auditoria auditoria) {
		this.auditoria = auditoria;
	}
	
	public void setTipoResponsabeilidade(TipoResponsabilidade tipoResponsabilidade){
		getId().setTipoResponsabilidade(tipoResponsabilidade);
	}
	
	public void setSexo(Sexo sexo){
		
		getId().getPessoa().setSexo(sexo);
		
	}
	
	public TipoResponsabilidade getTipoResponsabeilidade(){
		return getId().getTipoResponsabilidade();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Responsavel other = (Responsavel) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
	
	
	
}
